package ru.arriah.servicedesk.web.commonaction;

import java.io.IOException;
import java.util.Collection;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ru.arriah.common.web.action.ActionMapping;
import ru.arriah.common.web.action.DumbAction;
import ru.arriah.servicedesk.bean.RequestBean;
import ru.arriah.servicedesk.bean.TaskBean;
import ru.arriah.servicedesk.ejb.RequestManagerLocalHome;
import ru.arriah.servicedesk.ejb.RequestManagerLocalObject;
import ru.arriah.servicedesk.help.Utils;
import ru.arriah.servicedesk.web.commonaction.exception.InternalException;
import ru.arriah.servicedesk.web.commonaction.exception.PrivilegesException;

public class ProcessTaskReportFormAction extends DumbAction {
  protected RequestManagerLocalHome requestManagerLocalHome;  
  
  public ProcessTaskReportFormAction () throws NamingException {
     super();
     
     requestManagerLocalHome = 
        Utils.getRequestManagerHomeInterface();
  }

  
  public String execute(ActionMapping actionMapping,
      HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {
    try {
       
     boolean f = false;
     
     RequestManagerLocalObject requestManager = 
        requestManagerLocalHome.create();
               
     int taskId = idVal(request.getParameter("task_id"));
     int requestId = idVal(request.getParameter("request_id"));
     int userId = Utils.getUserId(request);
     
     String requestReport = request.getParameter("text");
     
     RequestBean requestBean = requestManager.selectRequest(requestId);
     TaskBean taskBean = requestManager.selectTask(taskId);
     
     if (requestBean.getLeadExecutorId() == userId)
        request.setAttribute("status", "request_lead_executor");
     else if (taskBean.getEmployeeId() == userId) {
        request.setAttribute("status", "executor");
     } else
        throw new PrivilegesException("illegal request for currentLeadExecutor"); 
     
                    
     if(requestReport == null || requestReport.length() < 1) {
        addErrorMessage(request, config.getProperty("ERROR.TASKREPORT_NEED_TEXT"));                
        
        Collection<TaskBean> tasksList = 
           requestManager.selectTasksByRequest(requestId);
        
        request.setAttribute("tasksList", tasksList);
        request.setAttribute("taskBean", taskBean);
        
     } else {
        f = true;
        if (requestManager.setTaskReport(taskId, requestReport)) 
           addInfMessage(request, config.getProperty("INF.TASKREPORT_ADDED"));
        else 
           addErrorMessage(request, config.getProperty("ERROR.TASKREPORT_NOT_ADDED"));
     }          
     
     request.setAttribute("taskBean", taskBean);
     requestManager.remove();   
     return f ? actionMapping.getSuccessTarget() : actionMapping.getFailureTarget();
    } catch (Exception e) {
      handleException(e, "execute");
      throw new InternalException("ErrorMessage.internal");
    }
  }
}